﻿using Abp.Application.Services;
using Abp.Application.Services.Dto;
using Akso.DataMaintains.Dto;
using Akso.Entities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Akso.DataMaintains
{
    public interface IDataMaintainAppService: IApplicationService
    {
        #region 账户信息
        /// <summary>
        /// 获取账户信息
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task<ListResultDto<BillAccountListDto>> GetBillAccounts(GetBillAccountsInput input);
        /// <summary>
        /// 在新增、编辑数据的弹出对话框中，获取对象的数据。
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task<GetBillAccountForEditOutput> GetBillAccountForEdit(NullableIdDto<Guid> input);
        /// <summary>
        /// 新增编辑账户信息
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task<BillAccount> CreateOrUpdateBillAccount(CreateOrUpdateBillAccountInput input);
        /// <summary>
        /// 删除账户信息
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task DeleteBillAccount(EntityDto<Guid> input);
        #endregion
        
        #region 收支分类
        Task<ListResultDto<IncomeExpendTypeListDto>> GetIncomeExpendTypes(GetIncomeExpendsInput input);
        Task<GetIncomeExpendTypeForEditOutput> GetIncomeExpendTypeForEdit(NullableIdDto<Guid> input);
        Task<IncomeExpendType> CreateOrUpdateIncomeExpendType(CreateOrUpdateIncomeExpendTypeInput input);
        Task DeleteIncomeExpendType(EntityDto<Guid> input);
        /// <summary>
        /// 获取收支分类列表
        /// </summary>
        /// <param name="input">1:收入;2:支出</param>
        /// <returns></returns>
        ListResultDto<IncomeExpendTypeListDto> GetListIncomeExpendTypes(int input);
        ListResultDto<BillAccountListDto> GetListBillAccounts();
        /// <summary>
        /// 获取辅助核算
        /// </summary>
        /// <returns></returns>
        ListResultDto<OtherCheckListDto> GetListOtherChecks(int input);
        #endregion

        #region 辅助核算
        Task<ListResultDto<OtherCheckListDto>> GetBillOtherChecks(GetOtherChecksInput input);
        Task<GetOtherCheckForEditOutput> GetBillOtherCheckForEdit(NullableIdDto<Guid> input);
        Task<BillOtherCheck> CreateOrUpdateOtherCheck(CreateOrUpdateOtherCheckInput input);
        Task DeleteOtherCheck(EntityDto<Guid> input);
        #endregion
    }
}
